# cmake脚本，cmake内置函数

# 指定cmake最小支持版本，参数使用空格、回车隔开
cmake_minimum_required(VERSION 3.10.2)

project("app_ndk")

# 参数1变量名生成so名称
# SHARED表示生成动态库，STATIC静态库
# 源文件
add_library(
        ndk-test
        SHARED
        ffmpeg-demo.cpp
        ndk-test.cpp
        EasyPlayer.h
        EasyPlayer.cpp
        JavaCallHelper.h
        JavaCallHelper.cpp
        macro.h
        macro.cpp
        SafeQueue.h
        SafeQueue.cpp
        AudioChannel.h
        AudioChannel.cpp
        VideoChannel.h
        VideoChannel.cpp
)

# FFmpeg开始配置
include_directories("include")

# 引入外部静态库、动态库
# 静态库：IMPORTED表示以导入的形式添加进来（预编译静态库）
# add_library(TestCmake STATIC IMPORTED)
# 设置目标属性方法,导入路径
# set_target_properties(TestCmake PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libTest.a)

# 动态库,动态库文件的路径必须在jni对象cpu的路径下 jni/armeabi-v7a
# 该方式引入动态库会找不到库文件
# add_library(TestCmake SHARED IMPORTED)
# set_target_properties(TestCmake PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libTest.so)

# 解决外部动态库引入问题,定位到目录即可(与add_library+set_target_properties作用相同)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}")

# 因为ffmpeg预编译库文件
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}")

find_library(
        log-lib
        log)

# 打印，${ANDROID_ABI}=armeabi-v7a
message("CMAKE_SOURCE_DIR = ${CMAKE_SOURCE_DIR}")

# 设置变量CMAKE_CXX_FLAGS C++的参数，会传给编译器,CMAKE_C_FLAGS C的参数
# 重新定义CMAKE_CXX_FLAGS变量
# -L表示将外部so库链接到源文件cpp中，因为ndk-test.cpp依赖libTest.so
# CMAKE_SOURCE_DIR:cmake文件所在目录，-L表示要链接外部的so库，即libTest.so
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/src/main/jni/armeabi-v7a")

# 链接，我们要生成的so必须放在第一个
target_link_libraries(
        ndk-test
        # 表示链接那个so文件，lib前缀，.so后缀可省略
        Test
        # 此处使用的静态库，有相互依赖，引入的顺序不能边，动态库不存在
        # ffmpeg需要依赖ndk下的libz.so
        avfilter avformat avcodec avutil swresample swscale
        ${log-lib} z)

